#pragma once

#include <AST/ExprAST.hpp>
#include <llvm/IR/Constants.h>

class Literal : public Expr {
  protected:
    Literal() = default;
    virtual ~Literal() = default;

    Value *cachedValue = nullptr;

  public:

    virtual Constant *codegen() override = 0;

    virtual Type *getType() = 0;
};

class Bool;
class Char;
class Float;
class Int;
class StringPtr;